<?php

require_once('tcpdf.php');

// Extend the TCPDF class to create custom Header and Footer
class FONDOPDF extends TCPDF {
	//Page header
    public function Header() {
        // get the current page break margin
        $bMargin = $this->getBreakMargin();
        // get current auto-page-break mode
        $auto_page_break = $this->AutoPageBreak;
        // disable auto-page-break
        $this->SetAutoPageBreak(false, 0);
        // set bacground image
       // $this->imagenFile = '/home/jsanchez/Programacion/Symfony/acatec/web/images/pdfs/fondo3.jpg';
        //$this->Image($this->imagenFile, 0, 0, 210, 297, '', '', '', false, 300, '', false, false, 0);
        // restore auto-page-break status
        $this->SetAutoPageBreak($auto_page_break, $bMargin);
        // set the starting point for the page content
        $this->setPageMark();
    }
    
    // Definimos los metadatos
    // set document information
    public function setMetadata() {
	    $this->SetCreator('Acalio Innova');
	    $this->SetAuthor('Acalio CRM');
	    $this->SetTitle('Acalio CRM');
	    $this->SetSubject('Acalio CRM');
	    $this->SetKeywords('TCPDF, PDF');
    }
    
    // Escribe las cabeceras de los documentos
    public function escribeDatosEmpresa($empresa){

    	// Imprimimos la cabecera y controlamos la posición a la vez que escribimos.
    	// set font
    	$this->SetFont('FreeSerif', '', 8);
    	//Damos valor a los margenes
    	$x=135; //posición horizontal.
    	$y=12; //posición vertical.
    	$w=200; //ancho.
    	$h=0;   //alto, si cero indica que es ajustable.
    	$borde = 0;
    	$separ = 0.2;
    	$limite = 230; // creo que lo correcto son 230 para que no se choque con el total, hacer pruebas!!!
    	$numpaginas = 1;
    	
    	//Imprimimos la información de cabecera de la empresa.
    	//$html= 'CIF: '.sfConfig::get('pdf_empresa_cif');
        $html= 'CIF: '.$empresa->getCif();
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$y = $this->getY()+ $separ; //$Tomamos la nueva posición vertical
    	//$html= sfConfig::get('pdf_empresa_direccion1');
        $html= $empresa->getDireccionLinea1();
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$y = $this->getY()+ $separ; //$Tomamos la nueva posición vertical
    	//$html= sfConfig::get('pdf_empresa_direccion2');
        $html= $empresa->getDireccionLinea2();
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$y = $this->getY()+ $separ; //$Tomamos la nueva posición vertical
    	//$html= sfConfig::get('pdf_empresa_cp').' '.sfConfig::get('pdf_empresa_poblacion').' ('.sfConfig::get('pdf_empresa_provincia').')';
        $html= $empresa->getCp().' '.$empresa->getPoblacion().' ('.$empresa->getProvincia().')';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$y = $this->getY()+ $separ; //$Tomamos la nueva posición vertical
    	//$html= 'Tel: '.sfConfig::get('pdf_empresa_telefono');
        $html= 'Tel: '.$empresa->getTelefono();
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$y = $this->getY()+ $separ; //$Tomamos la nueva posición vertical
    	//$html= 'Fax: '.sfConfig::get('pdf_empresa_fax');
        $html= 'Fax: '.$empresa->getFax();
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$y = $this->getY()+ $separ; //$Tomamos la nueva posición vertical
    	//$html= sfConfig::get('pdf_empresa_correo-e');
        $html= $empresa->getEmail();
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$y = $this->getY()+ $separ; //$Tomamos la nueva posición vertical
    	//$html= sfConfig::get('pdf_empresa_web');
        $html= $empresa->getWeb();
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    }
    
    // Escribe el logo en los documentos en el encabezado
    public function escribeLogo($empresa){
        
        //Controlamos si existe una imagen ya definida, sino ponemos una por defecto
        if ($empresa->getLogo()== null) {
            $imagen = sfConfig::get('pdf_empresa_rutaimagenes').sfConfig::get('pdf_empresa_imagendefecto');
        }
        else {
            $imagen = sfConfig::get('pdf_empresa_rutaimagenes').$empresa->getLogo();
        }
        
        //definimos la imagen que vamos a poner de encabezado
    	$logo = "<img src=\"".$imagen."\" alt=\"Logotipo\" width=800 border=\"0\" />";
    	//Damos valor a los margenes
    	$x=18; //posición horizontal.
    	$y=0; //posición vertical.
    	$borde = 0;
    	$separ = 1;
    	$limite = 230; // creo que lo correcto son 230 para que no se choque con el total, hacer pruebas!!!
    	$numpaginas = 1;
    	
    	//Imprimimos la información.
    	$this->writeHTMLCell(0, 0, $x, $y, $logo, $borde, 1, 0);
    }
    
    // Escribe el texto de la plantilla del documento
    public function escribeTextoDocumento(){
    	// Imprimimos la cabecera y controlamos la posición a la vez que escribimos.
    	// set font
    	$this->SetFont('times', '', 9);
    	$w=200; //ancho.
    	$h=0;   //alto, si cero indica que es ajustable.
    	$borde = 0;
    	$limite = 230; // creo que lo correcto son 230 para que no se choque con el total, hacer pruebas!!!

    	
    	//Imprimimos la información de cabecera de la empresa.
    	//Damos valor a los margenes
    	$x=9; //posición horizontal.
    	$y=73; //posición vertical.
    	$html= 'DOCUMENTO';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$x=37; //posición horizontal.
    	$html= 'NÚMERO';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$x=62; //posición horizontal.
    	$html= 'PÁG.';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$x=80; //posición horizontal.
    	$html= 'FECHA';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	
    	$this->SetFont('times', 'b', 9);
    	$x=12; //posición horizontal.
    	$y = 91; //$Tomamos la nueva posición vertical
    	$html= 'CANTIDAD';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$x=55; //posición horizontal.
    	$html= 'CONCEPTO';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$x=121; //posición horizontal.
    	$html= 'PRECIO UNID.';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$x=148; //posición horizontal.
    	$html= 'SUBTOTAL';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0); 
    	$x=170; //posición horizontal.
    	$html= 'DTO.';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$x=188; //posición horizontal.
    	$html= 'TOTAL';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	
    	$x=108; //posición horizontal.
    	$y = 200; //$Tomamos la nueva posición vertical
    	$html= 'TIPO';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$x=128; //posición horizontal.
    	$html= 'IMPORTE';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$x=148; //posición horizontal.
    	$html= 'DESCUENTO';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$x=175; //posición horizontal.
    	$html= 'BASE';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$x=192; //posición horizontal.
    	$html= 'I.V.A.';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$x=155; //posición horizontal.
    	$y=222;
    	$html= 'TOTAL';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
        
        //Elimino las observaciones para que no se escriban en todas las páginas
    	//$x=10; //posición horizontal.
    	//$y= 232;
    	//$html= 'OBSERVACIONES';
    	//$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    }
    
    // Escribe las observaciones al final del documento
    public function escribeObservaciones(){
    	// Imprimimos la cabecera y controlamos la posición a la vez que escribimos.
    	// set font
    	$this->SetFont('times', '', 9);
    	$w=200; //ancho.
    	$h=0;   //alto, si cero indica que es ajustable.
    	$borde = 0;
    	$limite = 230; // creo que lo correcto son 230 para que no se choque con el total, hacer pruebas!!!
        $x=10; //posición horizontal.
        $y= 232;
    	$html= 'OBSERVACIONES';
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    }
    
    
    // Escribe los datos tipo del documento
    public function escribeDocumento($tipo, $numero, $pagina, $fecha, CrmContacto $cliente, CrmVehiculo $vehiculo, $kilometros){
    	// Imprimimos la cabecera y controlamos la posición a la vez que escribimos.
    	// set font
    	$this->SetFont('times', 'b', 9);
    	$w=200; //ancho.
    	$h=0;   //alto, si cero indica que es ajustable.
    	$borde = 0;
    	$limite = 230; // creo que lo correcto son 230 para que no se choque con el total, hacer pruebas!!!
    
    	 
    	//Imprimimos la información de cabecera del documento
    	//Damos valor a los margenes
    	$x=13; //posición horizontal.
    	$y=78; //posición vertical.
    	$this->writeHTMLCell($w, $h, $x, $y, $tipo, $borde, 1, 0);
    	$x=40; //posición horizontal.
    	$this->writeHTMLCell($w, $h, $x, $y, $numero, $borde, 1, 0);
    	$x=65; //posición horizontal.
    	$this->writeHTMLCell($w, $h, $x, $y, $pagina, $borde, 1, 0);
    	$x=78; //posición horizontal.
    	$this->writeHTMLCell($w, $h, $x, $y, $fecha, $borde, 1, 0);
    	 
    	$this->SetFont('freemono', 'b', 14);
    	$x=110; //posición horizontal.
    	$y = 49; //$Tomamos la nueva posición vertical
    	$html= $cliente->getNombre().' '.$cliente->getApellidos();
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$this->SetFont('freemono', '', 12);
    	$y = 54; //$Tomamos la nueva posición vertical
    	$html= strtoupper($vehiculo->getMarca()).' '.strtoupper($vehiculo->getModelo()).' '.
    	       strtoupper($vehiculo->getTipo_motor()).' - '.strtoupper($vehiculo->getMatricula());
        $this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
        $y = 59; //$Tomamos la nueva posición vertical
    	$html= 'Kms: '.$kilometros;
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$y = 64; //$Tomamos la nueva posición vertical
    	$html= $cliente->getDomicilio();
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$y = 69; //$Tomamos la nueva posición vertical
    	$html= $cliente->getPoblacion();
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    	$y = 74; //$Tomamos la nueva posición vertical
    	$html= $cliente->getDni();
    	$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
    }
    
    // Escribe los conceptos del documento linea a linea
    public function escribeConceptos(Doctrine_Collection $conceptos){
    	// Imprimimos la cabecera y controlamos la posición a la vez que escribimos.
    	// set font
    	$this->SetFont('times', '', 9);
    	$w=200; //ancho.
    	$h=0;   //alto, si cero indica que es ajustable.
    	$borde = 0;
    	$limite = 180; // creo que lo correcto son 
        $separ=1; // Separcion entre lineas
        
    	$x = 13;
    	$y = 95;
    	
    	$i = 0; // para pintar linea si, linea no.
    	    	
    	foreach ($conceptos as $id => $concepto)
    	{   
    		if ($y<=$limite){
	    		$odd = fmod(++$i, 2) ? '#cccccc' : '#ffffff';
	    		$html = '<table border="0" cellspacing="10" cellpadding="0">';
	    		$html= $html . "<tr>";
	    		if (get_class($concepto)=="CrmParteConcepto"){
	    			$html= $html . "<td bgcolor=\"".$odd."\" align=\"center\" width=\"120\">". $concepto->getCantidad()."</td>";
	    		} else {
	    			$html= $html . "<td bgcolor=\"".$odd."\" align=\"center\" width=\"120\">". $concepto->getCantidad()."</td>";
	    		}
	    		//$html= $html . "<td bgcolor=\"".$odd."\" align=\"center\" width=\"120\">". get_class($concepto)."</td>";
	    		$html= $html . "<td bgcolor=\"".$odd."\" align=\"left\" width=\"1072\">". $concepto->getConcepto()."</td>";
	    		$html= $html . "<td bgcolor=\"".$odd."\" align=\"right\" width=\"255\">". number_format($concepto->getPrecioUnitario(),2,'.','')."</td>";
	    		if (get_class($concepto)=="CrmParteConcepto"){
	    			$html= $html . "<td bgcolor=\"".$odd."\" align=\"right\" width=\"268\">". number_format($concepto->getCantidad()*$concepto->getPrecioUnitario(),2,'.','')."</td>";
	    		} else {
	    			$html= $html . "<td bgcolor=\"".$odd."\" align=\"right\" width=\"268\">". number_format($concepto->getCantidad()*$concepto->getPrecioUnitario(),2,'.','')."</td>";
	    		}
	    		
	    		$html= $html . "<td bgcolor=\"".$odd."\" align=\"right\" width=\"150\">". $concepto->getDescuento()."</td>";
	    		//$html= $html . "<td bgcolor=\"".$odd."\" align=\"right\" width=\"80\">". $concepto->getIva()."</td>";
	    		$html= $html . "<td bgcolor=\"".$odd."\" align=\"right\" width=\"200\">". number_format($concepto->getTotal(),2,'.','')."</td>";
	    		$html= $html . "</tr>";
	    		$html = $html . '</table>';
	    		$this->writeHTMLCell($w, $h, $x, $y, $html, $borde, 1, 0);
	    		unset($conceptos[$id]);
	    		$y = $this->getY()+ $separ;
    		}
    	}
    	return $conceptos;
    }
    
    // Escribe los conceptos del documento linea a linea
    public function escribeTotales($documento, $ultimaPagina){
    	// Imprimimos la cabecera y controlamos la posición a la vez que escribimos.
    	// set font
    	$this->SetFont('times', '', 10);
    	// definimos lo que imprimira por defecto
    	$tipo = "---";
    	$importe = "---";
    	$descuento = "---";
    	$base = "---";
    	$iva = "---";
    	$total = "---";
    	
    	$w=200; //ancho.
    	$h=0;   //alto, si cero indica que es ajustable.
    	$borde = 0;
    	
    	if ($ultimaPagina){
	    $tipo = number_format($documento->getTipo(),2,'.','');
    	    $importe = number_format($documento->getImporte(),2,'.','');
    	    $descuento = number_format($documento->getDescuento(),2,'.','');
    	    $base = number_format($documento->getBase(),2,'.','');
    	    $iva = number_format($documento->getIva(),2,'.','');
    	    $total = number_format($documento->getTotal(),2,'.','');
    	}
    	$x=110; //posición horizontal.
    	$y = 205; //$Tomamos la nueva posición vertical
    	$this->writeHTMLCell($w, $h, $x, $y, $tipo, $borde, 1, 0);
    	$x=130; //posición horizontal.
    	$this->writeHTMLCell($w, $h, $x, $y, $importe, $borde, 1, 0);
    	$x=156; //posición horizontal.
    	$this->writeHTMLCell($w, $h, $x, $y, $descuento, $borde, 1, 0);
    	$x=175; //posición horizontal.
    	$this->writeHTMLCell($w, $h, $x, $y, $base, $borde, 1, 0);
    	$x=193; //posición horizontal.
    	$this->writeHTMLCell($w, $h, $x, $y, $iva, $borde, 1, 0);
    	$this->SetFont('times', 'b', 12);
    	$x=185; //posición horizontal.
    	$y = 221; //$Tomamos la nueva posición vertical
    	$this->writeHTMLCell($w, $h, $x, $y, $total, $borde, 1, 0);
    	
    }
}